var fs = require("fs");
var rootPath = "./GameHall";
process.chdir(rootPath);
console.log(process.cwd());     

var exec = require('child_process').exec;
var buildCmd = 'egret build GameHall -e';
var publishCmd = 'egret publish';
var pythonCmd = 'python hash_assets.py';

//是执行编译还是发布，false编译，true发布并执行打包tython
var isPublish = true;

console.log("ls");
//删除目录的文件
exec("ls",function(err, stdout, stderr)
{
	console.log(stdout);
	deleteDir();
});

function deleteDir(){
    if(!isPublish){
        console.log("删除目录 bin-debug");
        exec("rm -rf bin-debug",function(err, stdout, stderr)
        {
            console.log(stdout);
            if (err) {
                throw('error:' + stderr);
            }
            else {
                makeDebugDir();
            }
        });
    }
	else{
        console.log("删除目录 bin-release");
        exec("rm -rf bin-release",function(err, stdout, stderr)
        {
            console.log(stdout);
            if (err) {
                throw('error:' + stderr);
            }
            else{
                getEgretInfo();
            }
        });
    }
}

function makeDebugDir(){
    console.log("mkdir bin-debug");
    exec("mkdir bin-debug",function(err, stdout, stderr)
    {
        console.log(stdout);
        if (err) {
            throw('error:' + stderr);
        }
        else {
            makeDirBySrc();
        }
    });
}

/**根据src的文件夹目录 生成debug的文件夹目录*/
function makeDirBySrc(){
    readDirs("src");
    getEgretInfo();
}

function getEgretInfo(){
	console.log("egret info");
	exec("egret info",function(err,stdout,stderr){
        console.log(stdout);
        if(err){
            throw('error:' + stderr);
        }
        else{
            if(!isPublish){
                console.log("start "+buildCmd);
                exec(buildCmd,buildComplete);
            }
            else{
                console.log("start "+publishCmd);
                exec(publishCmd,publishComplete);
            }
        }
    })
}


function buildComplete(err, stdout, stderr) {
    if (err) {
    	console.log(stdout);
        throw('egret build error:' + stderr);
    }
    else {
        console.log(stdout);

        // var data = JSON.parse(stdout);
        var arr = stdout.split("\n");

        var len = arr.length;
        var succ = true;
        var i = 0;
        for (i = 0; i < len; i++) {
            //检测是否有报错
            if (arr[i].indexOf("error") > -1) {
                succ = false;
            }
            //删除多余的换行符
            if (arr[i].indexOf("\r")) {
                arr[i] = arr[i].replace("\r", "");
            }
        }
        len = arr.length;
        if (succ == false) {
            //打印报错的位置
            for (i = 0; i < len; i++) {
                if (arr[i].indexOf("error") > -1) {
                    console.warn(arr[i]);
                    throw(arr[i]);
                }
            }
            return;
        }

        exec("rm -rf bin-debug",function(error){});
    }
}

function publishComplete(err, stdout, stderr) {
    if (err) {
        console.log(stdout);
        throw('egret build error:' + stderr);
    }
    else {
        console.log(stdout);

        // var data = JSON.parse(stdout);
        var arr = stdout.split("\n");

        var len = arr.length;
        var succ = true;
        var i = 0;
        for (i = 0; i < len; i++) {
            //检测是否有报错
            if (arr[i].indexOf("error") > -1) {
                succ = false;
            }
            //删除多余的换行符
            if (arr[i].indexOf("\r")) {
                arr[i] = arr[i].replace("\r", "");
            }
        }
        len = arr.length;
        if (succ == false) {
            //打印报错的位置
            for (i = 0; i < len; i++) {
                if (arr[i].indexOf("error") > -1) {
                    console.warn(arr[i]);
                    throw (arr[i]);
                }
            }
            return;
        }
        else//进入下一个阶段:执行打包python
        {
            console.log("进入下一个阶段:执行打包python")
            var version = "0";
            for (i = 0; i < len; i++) {
                console.warn(arr[i]);
                if(arr[i].indexOf("开始发布 web 版本：") > -1)
                {
                    version = arr[i].replace("开始发布 web 版本：","");
                    //切换到python的目录
                    console.log("切换到python的目录");
                    console.log(process.cwd());
                    process.chdir(process.cwd()+ "/bin-release/web/" + version + "/resource/plugin");
                    break;
                }
            }

            console.log("开始执行python, exec_py...");
            exec(pythonCmd, exec_py);
        }
    }
}

/**python执行回调*/
function exec_py(err, stdout, stderr) {
    console.log(stdout);
    if (err) {
        console.log(stderr);
        throw ('python error:' + stderr);
    }
    else {
        console.log("python打包结束");
    }
}

/**读取目录*/
function readDirs(path) {
    console.log("readDirs "+path);
    var files = fs.readdirSync(path);
    if(files.length>0){
        for(var i=0; i<files.length; i++) {
            if(isDir(path+"/"+files[i])){
                makeDir(path, files[i]);
            }
        }

        for(var j=0; j<files.length; j++) {
            if(isDir(path+"/"+files[j])){
                readDirs(path+"/"+files[j]);
            }
        }
    }
}

/**创建文件夹*/
function makeDir(path,name) {
    var str = "bin-debug"+path.slice(3)+"/"+name;
    // console.log("创建文件夹 "+str);
    fs.mkdirSync(str);
}


/**是文件夹吗*/
function isDir(path) {
    var stat = fs.lstatSync(path);
    return stat.isDirectory();
}
